home *** CD-ROM | disk | FTP | other *** search
/ Acorn RISC PD-CD 1 / Acorn RISC PD-CD 1.iso / languages / dde / _pc / h / bbc < prev    next >
Text File  |  1992-04-30  |  14KB  |  545 lines

  1. (*
  2.  * Title  : bbc.h
  3.  * Purpose: provides bbc-style graphics and mouse/keyboard control.
  4.  *
  5.  *)
  6.  
  7. # ifndef __bbc_h
  8. # define __bbc_h
  9.  
  10. # ifndef __os_h
  11. # include "os.h"
  12. # endif
  13.  
  14. (* ----------------------- Text output functions --------------------------
  15.  * Decsription:   The following functions provide BBC-style text output
  16.  *                functions.  For brevity only a short description is
  17.  *                given per function.
  18.  *                NOTE: these functions are retained to allow "old-style"
  19.  *                operations. You should preferably use SWI calls via
  20.  *                kernel.h in the C library.
  21.  *)
  22.  
  23. (* VDU commands. *)
  24.  
  25. const   bbc_CharToPrinter   = 1;
  26.         bbc_EnablePrinter   = 2;
  27.         bbc_DisablePrinter  = 3;
  28.         bbc_TextToText      = 4;
  29.         bbc_TextToGraph     = 5;
  30.         bbc_EnableVDU       = 6;
  31.         bbc_Bell            = 7;
  32.         bbc_MoveOneBack     = 8;
  33.         bbc_MoveOneOn       = 9;
  34.         bbc_MoveDownOne     = 10;
  35.         bbc_MoveUpOne       = 11;
  36.         bbc_ClearText       = 12;
  37.         bbc_MoveToStart     = 13;
  38.         bbc_PageOn          = 14;
  39.         bbc_PageOff         = 15;
  40.         bbc_ClearGraph      = 16;
  41.         bbc_DefTextColour   = 17;
  42.         bbc_DefGraphColour  = 18;
  43.         bbc_DefLogical      = 19;
  44.         bbc_RestoreLogical  = 20;
  45.         bbc_DisableVDU      = 21;
  46.         bbc_ScreenMode      = 22;
  47.         bbc_MultiPurpose    = 23;
  48.         bbc_DefGraphWindow  = 24;
  49.         bbc_PlotCommand     = 25;
  50.         bbc_DefaultWindow   = 26;
  51.  
  52.         bbc_DefTextWindow   = 28;
  53.         bbc_DefGraphOrigin  = 29;
  54.         bbc_HomeText        = 30;
  55.         bbc_MoveText        = 31;
  56.  
  57. (* ------------ bbc_vdu ------------ 
  58.  * output single character.
  59.  *
  60.  *)
  61. procedure bbc_vdu(c : integer) : error; extern;
  62.  
  63.  
  64. (* ------------ bbc_vduw ----------- 
  65.  * output double character.
  66.  *
  67.  *)
  68. procedure bbc_vduw(w : integer) : error; extern;
  69.  
  70.  
  71. (* ------------ bbc_vduq ----------- 
  72.  * output multiple characters. ctl is a 
  73.  * control charcter, number of further 
  74.  * parameters is appropriate to ctl 
  75.  *(vduq knows how many to expect, and
  76.  * assumes correct params passed.
  77.  *)
  78. procedure bbc_vduq(ctl : integer; ..) : error; extern;
  79.  
  80.  
  81. (* -------- bbc_stringprint -------- 
  82.  * display null-terminated string.
  83.  *
  84.  *)
  85. procedure bbc_stringprint(s : string) : error; extern;
  86.  
  87.  
  88. (* ------------ bbc_cls ------------ 
  89.  * clear text window.
  90.  *
  91.  *)
  92. procedure bbc_cls : error; extern;
  93.  
  94.  
  95. (* ---------- bbc_colour ----------- 
  96.  * set text colour.
  97.  *
  98.  *)
  99. procedure bbc_colour(c : integer) : error; extern;
  100.  
  101.  
  102. (* ------------ bbc_pos ------------ 
  103.  * returns X coordinate of
  104.  * text cursor.
  105.  *
  106.  *)
  107. function bbc_pos : integer; extern;
  108.  
  109.  
  110. (* ------------ bbc_vpos ----------- 
  111.  * return Y coordinate of
  112.  * text cursor.
  113.  *
  114.  *)
  115. function bbc_vpos : integer; extern;
  116.  
  117.  
  118. (* ------------ bbc_tab ------------ 
  119.  * position text cursor at
  120.  * given coordinates.
  121.  *
  122.  *)
  123. procedure bbc_tab(i, j : integer) : error; extern;
  124.  
  125.  
  126. (* ----------------------- Graphics output functions -------------------- *)
  127. (* Plot codes to be used with the bbc_plot function. *)
  128.  
  129. const   bbc_SolidBoth       = $00;
  130.         bbc_SolidExFinal    = $08;
  131.         bbc_DottedBoth      = $10;
  132.         bbc_DottedExFinal   = $18;
  133.         bbc_SolidExInit     = $20;
  134.         bbc_SolidExBoth     = $28;
  135.         bbc_DottedExInit    = $30;
  136.         bbc_DottedExBoth    = $38;
  137. #define bbc_Point             $40  (* Clashes with bbc_point *)
  138.         bbc_HorizLineFillNB = $48;
  139.         bbc_TriangleFill    = $50;
  140.         bbc_HorizLineFillB  = $58;
  141. #define bbc_RectangleFill     $60  (* Clashes with bbc_rectanglefill *)
  142.         bbc_HorizLineFillF  = $68;
  143.         bbc_ParallelFill    = $70;
  144.         bbc_HorizLineFillNF = $78;
  145.         bbc_FloodToBack     = $80;
  146.         bbc_FloodToFore     = $88;
  147. #define bbc_Circle            $90  (* Clashes with bbc_circle *)
  148. #define bbc_CircleFill        $98  (* Clashes with bbc_circlefill *)
  149.         bbc_CircleArc       = $A0;
  150.         bbc_Segment         = $A8;
  151.         bbc_Sector          = $B0;
  152.         bbc_Block           = $B8;
  153.         bbc_Ellipse         = $C0;
  154.         bbc_EllipseFill     = $C8;
  155.         bbc_GraphicsChar    = $D0;
  156.  
  157.         bbc_SpritePlot      = $E8;       
  158.  
  159.  
  160. (* Within each block of eight the offset from the base number has the 
  161.    following meaning : *)
  162.  
  163.         bbc_MoveCursorRel   = 0;
  164.         bbc_DrawRelFore     = 1;
  165.         bbc_DrawRelInverse  = 2;
  166.         bbc_DrawRelBack     = 3;
  167.         bbc_MoveCursorAbs   = 4;
  168.         bbc_DrawAbsFore     = 5;
  169.         bbc_DrawAbsInverse  = 6;
  170.         bbc_DrawAbsBack     = 7;
  171.  
  172.  
  173. (* The above applies except for bbc_Block where the codes are as follows : *)
  174.  
  175.         bbc_BMoveRel        = 0;
  176.         bbc_BMoveRectRel    = 1;
  177.         bbc_BCopyRectRel    = 2;
  178.  
  179.         bbc_BMoveAbs        = 4;
  180.         bbc_BMoveRectAbs    = 5;
  181.         bbc_BCopyRectAbs    = 6;
  182.  
  183. (* ------------- bbc_plot ------------- 
  184.  * do a given plot operation.
  185.  *
  186.  *)
  187. procedure bbc_plot(plotnumber, x, y : integer) : error; extern;
  188.  
  189.  
  190. (* ------------- bbc_mode ------------- 
  191.  * set the screen mode.
  192.  *
  193.  *)
  194. procedure bbc_mode(m : integer) : error; extern;
  195.  
  196.  
  197. (* ------------- bbc_move ------------- 
  198.  * move graphics cursor to given 
  199.  * absolute coordinates.
  200.  *
  201.  *)
  202. procedure bbc_move(x, y : integer) : error; extern;
  203.  
  204.  
  205. (* ------------ bbc_moveby ------------ 
  206.  * move graphics cursor to position
  207.  * relative to its current text cursor
  208.  * position.
  209.  *)
  210. procedure bbc_moveby(dx, dy : integer) : error; extern;
  211.  
  212.  
  213. (* ------------- bbc_draw ------------- 
  214.  * draw a line to given absolute
  215.  * coordinates.
  216.  *
  217.  *)
  218. procedure bbc_draw(x, y : integer) : error; extern;
  219.  
  220.  
  221. (* ------------ bbc_drawby ------------ 
  222.  * draw a line to position relative to
  223.  * current graphics cursor.
  224.  *
  225.  *)
  226. procedure bbc_drawby(dx, dy : integer) : error; extern;
  227.  
  228.  
  229. (* --------- bbc_rectangle ------------ 
  230.  * plot a rectangle, given:
  231.  *       LeftX, BottomY, Width, Height.
  232.  *
  233.  *)
  234. procedure bbc_rectangle(leftx, bottomy,
  235.                         width, height : integer) : error; extern;
  236.  
  237.  
  238. (* -------- bbc_rectanglefill --------- 
  239.  * plot a solid rectangle, given:
  240.  *       LeftX, BottmY, Width, Height.
  241.  *
  242.  *)
  243. procedure bbc_rectanglefill(leftx, bottomy,
  244.                         width, height : integer) : error; extern;
  245.  
  246.  
  247. (* ------------ bbc_circle ------------ 
  248.  * draw a circle, given:
  249.  *       Xcoord, Ycoord, Radius.
  250.  *
  251.  *)
  252. procedure bbc_circle(x, y, r : integer) : error; extern;
  253.  
  254.  
  255. (* ---------- bbc_circlefill ---------- 
  256.  * draw a solid circle, given:
  257.  *       Xcoord, Ycoord, Radius.
  258.  *
  259.  *)
  260. procedure bbc_circlefill(x, y, r : integer) : error; extern;
  261.  
  262.  
  263. (* ------------ bbc_origin ------------ 
  264.  * move graphics origin to given absolute
  265.  * coordinates.
  266.  *
  267.  *)
  268. procedure bbc_origin(x, y : integer) : error; extern;
  269.  
  270.  
  271. (* ------------ bbc_gwindow ----------- 
  272.  * set up graphics window, given:
  273.  *     BottomLeftX, BottomLeftY,
  274.  *     TopRightX, TopRightY.
  275.  *)
  276. procedure bbc_gwindow(bottomleftx, bottomlefty,
  277.                 toprightx, toprighty : integer) : error; extern;
  278.  
  279.  
  280. (* ------------- bbc_clg ------------- 
  281.  * clear graphics window.
  282.  *
  283.  *)
  284. procedure bbc_clg : error; extern;
  285.  
  286.  
  287. (* ------------ bbc_fill ------------- 
  288.  * flood-fill area X,Y
  289.  * fills from X,Y til either non_background
  290.  * colour or edge of screen.
  291.  *
  292.  *)
  293. procedure bbc_fill(x, y : integer) : error; extern;
  294.  
  295.  
  296. (* ------------- bbc_gcol ------------ 
  297.  * set graphics colour to given value.
  298.  *
  299.  *)
  300. procedure bbc_gcol(action, colour : integer) : error; extern;
  301.  
  302.  
  303. (* ------------- bbc_tint ------------
  304.  * Set grey level of a colour: use tint 0-3, as it gets shifted for you.
  305.  *
  306.  *)
  307. procedure bbc_tint(_type, value : integer) : error; extern;
  308.  
  309.  
  310. (* ------------- bbc_palette ---------
  311.  * Physical to logical colour definition.
  312.  * Logical colour, Physical colour, 
  313.  * Red level, Green level, Blue level.
  314.  *
  315.  *)
  316. procedure bbc_palette(l, p, r, g, b : integer) : error; extern;
  317.  
  318.  
  319. (* ------------- bbc_point -----------
  320.  * Find the logical colour of a pixel at
  321.  * indicated coordinates. x, y.
  322.  *
  323.  *)
  324. function bbc_point(x, y : integer) : integer; extern;
  325.  
  326.  
  327. (* ------------------------- VDU and Mode Variables. --------------------- *)
  328.  
  329. (* VDU variables. *)
  330.  
  331. const
  332.   bbc_GWLCol          = 128;     (* graphics window (ic) *)
  333.   bbc_GWBRow          = 129;     (* (left, bottom, right, top) *)
  334.   bbc_GWRCol          = 130;
  335.   bbc_GWTRow          = 131;
  336.   bbc_TWLCol          = 132;     (* text window *)
  337.   bbc_TWBRow          = 133;     (* (left, bottom, right, top) *)
  338.   bbc_TWRCol          = 134;
  339.   bbc_TWTRow          = 135;
  340.   bbc_OrgX            = 136;     (* graphics origin (ec) *)
  341.   bbc_OrgY            = 137;
  342.   bbc_GCsX            = 138;     (* graphics cursor (ec) *)
  343.   bbc_GCsY            = 139;
  344.   bbc_OlderCsX        = 140;     (* oldest graphics cursor (ic) *)
  345.   bbc_OlderCsY        = 141;
  346.   bbc_OldCsX          = 142;     (* previous graphics cursor (ic) *)
  347.   bbc_OldCsY          = 143;
  348.   bbc_GCsIX           = 144;     (* graphics cursor (ic) *)
  349.   bbc_GCsIY           = 145;
  350.   bbc_NewPtX          = 146;     (* new point (ic) *)
  351.   bbc_NewPtY          = 147;
  352.   bbc_ScreenStart     = 148;     (* start of screen memory *)
  353.   bbc_DisplayStart    = 149;     (* start of display screen memory *)
  354.   bbc_TotalScreenSize = 150;     (* size of configured screen memory *)
  355.   bbc_GPLFMD          = 151;     (* GCOL action for foreground colour *)
  356.   bbc_CPLBMD          = 152;     (* GCOL action for background colour *)
  357.   bbc_GFCOL           = 153;     (* foreground/background colours *)
  358.   bbc_GBCOL           = 154;
  359.   bbc_TForeCol        = 155;     (* text foreground/background colours *)
  360.   bbc_TBackCol        = 156;
  361.   bbc_GFTint          = 157;     (* graphics tints *)
  362.   bbc_GBTint          = 158;
  363.   bbc_TFTint          = 159;     (* text tints *)
  364.   bbc_TBTint          = 160;
  365.   bbc_MaxMode         = 161;     (* highest mode number available *)
  366.   bbc_GCharSizeX      = 162;     (* size of VDU-5 system font in pixels *)
  367.   bbc_GCharSizeY      = 163;
  368.   bbc_GCharSpaceX     = 164;     (* spacing of VDU-5 system font *)
  369.   bbc_GCharSpaceY     = 165;
  370.   bbc_HLineAddr       = 166;
  371.   bbc_TCharSizeX      = 167;     (* text chars (in pixels) *)
  372.   bbc_TCharSizeY      = 168;
  373.   bbc_TCharSpaceX     = 169;
  374.   bbc_TCharSpaceY     = 170;
  375.  
  376. type bbc_vduvariable_ptr = ^bbc_vduvariable;
  377.      bbc_vduvariable = integer;
  378.  
  379. const
  380.   bbc_ModeFlags = 0;             (* bit0->non-graphic,
  381.                                     bit1->teletext,
  382.                                     bit2->gap *)
  383.   bbc_ScrRCol = 1;               (* max text col number *)
  384.   bbc_ScrBCol = 2;               (* max text row number *)
  385.   bbc_NColour = 3;               (* max logical colour: 1, 3, 15 or 63 *)
  386.   bbc_XEigFactor = 4;            (* OS-unit->pixel shift factor.
  387.                                     0 -> OS-units = pixels,
  388.                                     1 -> 2 OS-units per pixel,
  389.                                     2 -> 4 OS-units per pixel, etc. *)
  390.   bbc_YEigFactor = 5;
  391.   bbc_LineLength = 6;            (* bytes per pixel row. *)
  392.   bbc_ScreenSize = 7;            (* bytes per screen. *)
  393.   bbc_YShftFactor = 8;           (* DEPRECATED; Log(2) of LineLength/5. *)
  394.   bbc_Log2BPP = 9;               (* log base 2 of bits per pixel. *)
  395.   bbc_Log2BPC = 10;              (* log base 2 of bytes per character. *)
  396.   bbc_XWindLimit = 11;           (* pixels across - 1 *)
  397.   bbc_YWindLimit = 12;           (* pixels up - 1 *)
  398.  
  399. type bbc_modevariable_ptr = ^bbc_modevariable;
  400.      bbc_modevariable = integer;
  401.  
  402.  
  403. (* ------------- bbc_vduvar ---------
  404.  * Read a single VDU or mode variable
  405.  * value, for the current screen mode
  406.  *
  407.  *)
  408. function bbc_vduvar(varno : integer) : integer; extern;
  409.  
  410.  
  411. (* ------------- bbc_vduvars --------
  412.  * read several VDU or mode variable
  413.  * values. vars points to a sequence
  414.  * of ints, terminated by -1. Each is
  415.  * a VDU or mode variable number, and the
  416.  * corresponding values will be
  417.  * replaced by the value of that variable
  418.  *
  419.  *)
  420. procedure bbc_vduvars(vars : bbc_vduvariable_ptr;
  421.                 values : pointer) : error; extern;
  422.  
  423.  
  424. (* ------------- bbc_modevar -------
  425.  * Read a single mode variable, for the
  426.  * given screen mode.
  427.  *
  428.  *)
  429. function bbc_modevar(mode, varno : integer) : integer; extern;
  430.  
  431.  
  432. (* ------------------------------- Other calls. -------------------------- *)
  433.  
  434. (* ------------- bbc_get ---------
  435.  * Return a character from the input
  436.  * stream. $1xx is returned if an
  437.  * escape condition exists
  438.  *
  439.  *)
  440. function bbc_get : integer; extern;
  441.  
  442.  
  443. (* ------------- bbc_cursor ---------
  444.  * Alter cursor appearance. Argument
  445.  * takes values 0 to 3
  446.  *
  447.  *)
  448. procedure bbc_cursor(n : integer) : error; extern;
  449.  
  450.  
  451. (* ------------- bbc_adval ---------
  452.  * Read data from analogue ports or
  453.  * give buffer data.
  454.  *
  455.  *)
  456. function bbc_adval(x : integer) : integer; extern;
  457.  
  458.  
  459. (* ----------- bbc_getbeat -------
  460.  * Return current beat value
  461.  *
  462.  *)
  463. function bbc_getbeat : integer; extern;
  464.  
  465.  
  466. (* ----------- bbc_getbeats ------
  467.  * read beat counter cycle length
  468.  *
  469.  *)
  470. function bbc_getbeats : integer; extern;
  471.  
  472.  
  473. (* ---------- bbc_gettempo ------
  474.  * read rate at which beat counter
  475.  * counts
  476.  *
  477.  *)
  478. function bbc_gettempo : integer; extern;
  479.  
  480.  
  481. (* ---------- bbc_inkey ---------
  482.  * Return character code from an
  483.  * input stream or the keyboard
  484.  *
  485.  *)
  486. function bbc_inkey(n : integer) : integer; extern;
  487.  
  488. (* ---------- bbc_setbeats ------
  489.  * Set beat counter cycle length
  490.  *
  491.  *)
  492. procedure bbc_setbeats(l : integer) : error; extern;
  493.  
  494.  
  495. (* ------------ bbc_settempo ---
  496.  * Set rate at which beat counter
  497.  * counts
  498.  *
  499.  *)
  500. procedure bbc_settempo(newtempo : integer) : error; extern;
  501.  
  502.  
  503. (* ----------- bbc_sound --------
  504.  * Make or schedule a sound.
  505.  * Params: Channel, Amplitude,
  506.  * Pitch, Duration, Future Time
  507.  *
  508.  *)
  509. procedure bbc_sound(chan, amp,
  510.                 pitch, dur, futime : integer) : error; extern;
  511.  
  512.  
  513. (* ------------ bbc_soundoff ----
  514.  * Deactivate sound system
  515.  *
  516.  *)
  517. procedure bbc_soundoff : error; extern;
  518.  
  519.  
  520. (* ----------- bbc_soundon -------
  521.  * Activate sound system
  522.  *
  523.  *)
  524. procedure bbc_soundon : error; extern;
  525.  
  526.  
  527. (* ------------ bbc_stereo -------
  528.  * Set stereo position for specified
  529.  * channel. Params: Channel, Position
  530.  *
  531.  *)
  532. procedure bbc_stereo(channel, position : integer) : error; extern;
  533.  
  534.  
  535. (* ----------- bbc_voices --------
  536.  * Set number of sound channels
  537.  * 1, 2, 4 or 8.
  538.  *
  539.  *)
  540. procedure bbc_voices(channels : integer) : error; extern;
  541.  
  542. #endif
  543.  
  544. (* end of bbc.h *)
  545.